home *** CD-ROM | disk | FTP | other *** search
/ Archive Magazine CD 1995 / Archive Magazine CD 1995.iso / discs / prog_disc / volume_2 / issue_08 / testrandom < prev   
Encoding:
Text File  |  1989-04-17  |  1.1 KB  |  51 lines

  1. { >pas.testrandom }
  2. program testrandom(output);
  3.  
  4. const
  5.    OS_ReadMonotonicTime = 66;
  6.    R0                   = 0;
  7.  
  8. var
  9.    loopcount : integer;
  10.    starttime : integer;
  11.  
  12. function readtime : integer;
  13.  
  14. var
  15.    timeslot : integer;
  16. begin
  17.    *SWI_OS_ReadMonotonicTime;
  18.    *STR_R0,timeslot;
  19.    readtime := timeslot
  20. end;  {readtime}
  21.  
  22. function random : integer;
  23.  
  24. static   seed : integer;
  25. static   done : boolean := false;
  26.  
  27. const
  28.    mult =      109;      { mult will need changing if modulus is increased }
  29.    incr =      853;
  30.    modulus =   8192;
  31.  
  32. begin
  33.    if not done
  34.       then
  35.          begin
  36.             seed := readtime;
  37.             done := true
  38.          end;
  39.                           { this ensures that we have an unknown start }
  40.    seed := (mult * seed + incr) mod modulus;
  41.    random := seed;
  42.    seed   := seed + readtime
  43.                           { this ensures that the sequence changes }
  44. end; { random }
  45.  
  46. begin
  47.    starttime := readtime;
  48.    for loopcount := 1 to 100 do
  49.       writeln('The number now is ',random:4,' on try ',loopcount:3,' after ',(readtime-starttime)/100:6:3,' seconds.')
  50. end.
  51.